/**
 * 定义目标源接口，用于获取和管理目标对象或类
 */
package com.test.aop;

/**
 * TargetSource 接口用于定义一组方法，这些方法可以获取目标类的信息，
 * 判断目标是否为静态，并获取和释放目标对象实例
 */
public interface TargetSource {

    /**
     * 获取目标类的Class对象
     *
     * @return 目标类的Class对象
     */
    Class<?> getTargetClass();

    /**
     * 判断目标是否为静态
     *
     * @return 如果目标是静态的，则返回true；否则返回false
     */
    boolean isStatic();

    /**
     * 获取目标对象实例
     *
     * @return 目标对象的实例
     * @throws Exception 如果获取目标对象时发生错误，则抛出异常
     */
    Object getTarget() throws Exception;

    /**
     * 释放目标对象资源
     *
     * @param target 需要释放的目标对象
     * @throws Exception 如果释放目标对象时发生错误，则抛出异常
     */
    void releaseTarget(Object target) throws Exception;
}
